﻿import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
//import QtQuick.Controls.Styles

import Shared

/*基础上GamePage.qml，所以有errorMessage,infoMessage。
  有1个title，1个ListView和2个GameButton。
*/
GamePage {
    //property bool btn_update_sta: false         //作废。全部由C++控制。
    property bool stat_btn_getfile: false
    //property bool txt_ok_vis: false           //TODO不知道如何在QML中处理，暂使用C++。

    /*QQ会重载吗？
    */
    function init()
    {
        console.log("show Boot.qml")
        //btn_update_sta= false;
        stat_btn_getfile= true;

        deviceHandler.ratio= 0;                 //可能不管用
        deviceHandler.bin_name="";              //可能不管用
        deviceHandler.btn_update= false;        //实测管用。因为在Qml中设置，实际是在C++中调用setBtn_update()。
        deviceHandler.stat_btn_getfile= true;   //默认进入Boot页面，“获取文件”按钮为使能状态。
        deviceHandler.stat_tim= false;          //Boot页面中定时器的运行状态。

        console.log("QML 0->ratio");
    }

    Text {
        id: txt_title
        anchors.top: parent.top

        text: qsTr("BOOT")
        color: "green"
        anchors.horizontalCenter: parent.horizontalCenter
        font.pointSize: 48
    }


    //版本信息。
    RowLayout{
        id: row_ver
        anchors.topMargin: 20
        anchors.top: txt_title.bottom
        width: parent.width

        Text {
            id: txt_ver
            Layout.alignment: Qt.AlignLeft

            text: qsTr("APP 版本:")
            color: "green"
        }

        TextField{
            id: txtfd_ver
            //anchors.fill: parent              //不行，会占满整个width
            //Layout.alignment: Qt.AlignCenter  //不行，默认宽度
            //Layout.maximumWidth: 1000         //不行，默认宽度
            anchors.left: txt_ver.right        //warning
            anchors.right: btn_ver_rd.left

            enabled: false      //不支持输入
            color: "white"
            text: deviceHandler.ver_info        //形如："XXXX_08008000_010215.bin"，其中010215是版本号。
            font.pointSize: 14
        }

        Button{
            id: btn_ver_rd
            Layout.alignment: Qt.AlignRight
            //enabled: stat_btn_getfile                 //实测有效。.qml文件中定义的属性。
            //enabled: deviceHandler.stat_btn_getfile     //实测OK，也可以在boot_findbin()中执行setStat_btn_getfile(false)。
            text: qsTr("读取")

            onClicked: {
                //btn_update_sta= true;   //获取文件成功后才能使能“刷机”按钮。
                //stat_btn_getfile= false;
                //deviceHandler.stat_btn_getfile= false;  //实测无效。


                console.log("update ver info");
                //txtfd_ver.text=""                 //不可行，会造成QML此控件不更新内容。
                //row_ver_2.txtfd_ver_2.text=""     //QQ提示QML错误，造成后续语句不执行。
                deviceHandler.reset_ver_info();     //清空QML页面的版本信息。
                deviceHandler.data03h_to_periph(GameSettings.addr_ver, 25+ 5);
                //deviceHandler.boot_findbin(Number(txtfd_ip1.text),Number(txtfd_ip2.text),Number(txtfd_ip3.text),Number(txtfd_ip4.text),Number(txtfd_port.text));
            }
        }
    }


    //版本信息2。
    RowLayout{
        id: row_ver_2
        anchors.top: row_ver.bottom
        width: parent.width

        Text {
            id: txt_placeholder_1
            Layout.alignment: Qt.AlignLeft

            text: qsTr("  ")
            color: "green"
        }

        TextField{
            id: txtfd_ver_2
            //anchors.fill: parent              //不行，会占满整个width
            anchors.left: txt_placeholder_1.right        //warning
            anchors.right: parent.right
            //Layout.alignment: Qt.AlignCenter  //不行，默认宽度
            //Layout.maximumWidth: 1000         //不行，默认宽度
            //anchors.top: txtfd_ver.bottom
            //anchors.left: txt_ver.right        //warning
            //anchors.right: btn_ver_rd.left

            enabled: false      //不支持输入
            color: "white"
            text: deviceHandler.ver_info_2      //形如："XXXX_08008000_010215.bin"，其中010215是版本号。
            font.pointSize: 14
        }
   }

    //BOOT版本。
    RowLayout{
        id: row_ver_boot
        anchors.top: row_ver_2.bottom
        width: parent.width

        Text {
            id: txt_placeholder_2
            Layout.alignment: Qt.AlignLeft

            text: qsTr("BOOT版本:")
            color: "green"
        }

        TextField{
            id: txtfd_ver_boot
            //anchors.fill: parent              //不行，会占满整个width
            anchors.left: txt_placeholder_2.right        //warning
            anchors.right: parent.right
            //Layout.alignment: Qt.AlignCenter  //不行，默认宽度
            //Layout.maximumWidth: 1000         //不行，默认宽度
            //anchors.top: txtfd_ver.bottom
            //anchors.left: txt_ver.right        //warning
            //anchors.right: btn_ver_rd.left

            enabled: false      //不支持输入
            color: "white"
            text: deviceHandler.ver_boot      //形如："XXXX_08008000_010215.bin"，其中010215是版本号。
            font.pointSize: 14
        }
    }


    //文件名称。
    RowLayout{
        id: row_file
        anchors.topMargin: 40
        anchors.top: row_ver_boot.bottom
        width: parent.width

        Text {
            id: txt_name
            Layout.alignment: Qt.AlignLeft

            text: qsTr("文件名：")
            color: "green"
        }

        TextField{
            id: txtfd_file
            //anchors.fill: parent              //不行，会占满整个width
            //Layout.alignment: Qt.AlignCenter  //不行，默认宽度
            //Layout.maximumWidth: 1000         //不行，默认宽度
            anchors.left: txt_name.right        //warning
            anchors.right: btn_file_rd.left

            enabled: false      //不支持输入
            color: "white"
            text: deviceHandler.bin_name        //形如："XXXX_08008000_010215.bin"，其中010215是版本号。
            font.pointSize: 14
        }

        Button{
            id: btn_file_rd
            Layout.alignment: Qt.AlignRight
            //enabled: stat_btn_getfile                 //实测有效。.qml文件中定义的属性。
            enabled: deviceHandler.stat_btn_getfile     //实测OK，也可以在boot_findbin()中执行setStat_btn_getfile(false)。
            text: qsTr("获取文件")

            onClicked: {
                //btn_update_sta= true;   //获取文件成功后才能使能“刷机”按钮。
                stat_btn_getfile= false;
                deviceHandler.stat_btn_getfile= false;  //实测无效。


                console.log("update bin name");
                //void data03h_to_periph(uint16_t addr, uint32_t cnt);
                deviceHandler.boot_findbin(Number(txtfd_ip1.text),Number(txtfd_ip2.text),Number(txtfd_ip3.text),Number(txtfd_ip4.text),Number(txtfd_port.text));
            }
        }
    }

    //服务器地址和端口。
    RowLayout{
        id: row_ip
        anchors.top: row_file.bottom
        width: parent.width

        Row{
            anchors.fill: parent

            Text {
                text: qsTr("远端地址")
                color: "green"
            }

            TextField{
                id: txtfd_ip1

                text: qsTr("118")
                //text: deviceHandler.plc_addr.toString()   //测试ok
                color: "white"

                inputMask: "999"
                width: parent.width/8
            }
            Label {
                text: "."
                color: "white"
                font.pixelSize: 28
            }

            TextField{
                id: txtfd_ip2
                width: parent.width/8

                text: qsTr("195")
                //text: deviceHandler.plc_addr.toString()   //测试ok
                color: "white"

                inputMask: "999"

            }
            Label {
                text: "."
                color: "white"
                font.pixelSize: 28
            }

            TextField{
                id: txtfd_ip3
                width: parent.width/8

                text: qsTr("239")
                //text: deviceHandler.plc_addr.toString()   //测试ok
                color: "white"

                inputMask: "999"
            }
            Label {
                text: "."
                color: "white"
                font.pixelSize: 28
            }

            TextField{
                id: txtfd_ip4
                width: parent.width/8

                text: qsTr("160")
                //text: deviceHandler.plc_addr.toString()   //测试ok
                color: "white"

                inputMask: "999"
            }
        }
    }

    RowLayout{
        id: row_port
        anchors.top: row_ip.bottom

        Text {
            text: qsTr("远端端口")
            color: "green"
        }

        TextField{
            id: txtfd_port

            text: qsTr("27833")      //51293
            //text: deviceHandler.plc_addr.toString()   //测试ok
            color: "white"
            inputMask: "00000"  //6位数字，最大65535。
        }
    }


    //进度条。
    ProgressBar{
        id: progressbar_bin

        anchors.bottom: btn_update.top
        anchors.bottomMargin: 40
        anchors.horizontalCenter: parent.horizontalCenter

        //anchors.verticalCenter: parent.verticalCenter
        //anchors.left: parent.left
        //anchors.right: parent.right
        x:parent.width*0.1
        width: parent.width*0.8
        //height: parent.height/20
        //indeterminate: true     //动态瞎显示，只动作，无进度。

        value: deviceHandler.ratio
    }


    Text {
        id: txt_ok

        anchors.horizontalCenter: parent.horizontalCenter
        anchors.top: progressbar_bin.bottom
        anchors.topMargin: 10

        visible: deviceHandler.txt_ok_v

        text: qsTr("升级成功")
        color: "green"
    }

    //刷机按钮
    Button{
        id: btn_update
        anchors.bottom: txt_info.top
        anchors.bottomMargin: 40
        anchors.horizontalCenter: parent.horizontalCenter
        //enabled: btn_update_sta
        enabled: deviceHandler.btn_update     //C++定义的Q_PROPERTY()。
        width: parent.width/2
        height: width/2

        text: qsTr("刷机")
        font.pointSize: 36

        onClicked: {
            console.log("Start bin file ...");
            //btn_update_sta= false;          //禁止本按钮。
            //btn_update.enabled= false;      //禁止本按钮。不使用这么方法，而由C++处理逻辑更合理吗？

            deviceHandler.boot_start();
        }
    }


    //帮助信息
    Text {
        id: txt_info
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 20
        anchors.horizontalCenter: parent.horizontalCenter
        //anchors.centerIn: parent.Center

        text: qsTr("先获取文件，再点击刷机。手机不可熄屏")
        color: "green"


        font.pointSize:20
    }


    Timer{
        property bool sta_tim: false

        id: tim_flash_progress
        interval: 500
        repeat: true
        running: deviceHandler.stat_tim //由C++控制着定时器。

        onTriggered: {
            if(sta_tim == true){
                sta_tim= false
                deviceHandler.ratio= 0.2//progressbar_bin.value= 0.2
            }
            else{
                sta_tim= true
                deviceHandler.ratio= 0.0//progressbar_bin.value= 0.0
            }
            //progressbar_bin.enabled= true;

            console.log("tim_flash_progress...");
        }
    }
}
